<?php
class Cookienew_model extends CI_Model {
	private $table = 'cookies';
	function __construct() {
		parent::__construct ();
		$this->load->library ( 'error_code_library' );
		// 加载处理错误的类
		$this->db = $this->load->database ( 'master', TRUE );
		// 加载数据库　　//
	}
	public function get_cookie($platform = 'sina', $need_delay = true) {
		$time_now = time ();
		// 返回自从 Unix 纪元（格林威治时间 1970 年 1 月 1 日 00:00:00）到当前时间的秒数。
		$this->db->select ( '*' );
		$this->db->from ( $this->table );
		$this->db->where ( 'platform', $platform );
		$this->db->where ( 'status', 1 );
		if ($need_delay) {
			$this->db->where ( 'last_usetime <', ($time_now - 5) );
			// 选择在5秒之内没有使用过的cookie
		}
		$this->db->order_by ( 'last_usetime' );
		// 这里保证每个cookies使用的频率几乎一致
		$query = $this->db->get ();
		if ($query->num_rows () <= 0) {
			return $this->error_code_library->getError ( 'system', 'data', 'no_data', 'In Function ' . __FUNCTION__ );
		} else {
			$result = $query->row_array ();
			$this->db->set ( 'last_usetime', $time_now );
			$this->db->where ( '`id` = ' . $result ['id'] );
			$this->db->update ( $this->table );
			return $result;
		}
	}
	public function get_cookie_count($platform) {
		$this->db->where ( 'platform', $platform );
		$this->db->where ( 'status', 1 );
		$this->db->from ( $this->table );
		$count = $this->db->count_all_results ();
		return $count;
	}
	public function get_cookie_bak($platform) {
		// 从前20个结果获取一个随机值
		$this->db->select ( '*' );
		$this->db->from ( $this->table );
		$this->db->where ( 'platform', $platform );
		$this->db->where ( 'status', 1 );
		$this->db->order_by ( 'times' );
		$this->db->limit ( 20 );
		$query = $this->db->get ();
		if ($query->num_rows () <= 0) {
			return $this->error_code_library->getError ( 'system', 'data', 'no_data', 'In Function ' . __FUNCTION__ );
		} else {
			$result_array = $query->result_array ();
			$rand_key = array_rand ( $result_array );
			return $result_array [$rand_key];
		}
	}
	public function get_unlock_cookie($platform) {
		$this->db->select ( '*' );
		$this->db->from ( $this->table );
		$this->db->where ( 'platform', $platform );
		$this->db->where ( 'status', - 1 );
		$this->db->order_by ( 'last_logintime', "DESC" );
		$query = $this->db->get ();
		if ($query->num_rows () <= 0) {
			return $this->error_code_library->getError ( 'system', 'data', 'no_data', 'In Function ' . __FUNCTION__ );
		} else {
			$result = $query->row_array ();
			// 返回第一条数据
			return $result;
		}
		// 获取一条　状态为　-1的cookie
	}
	public function update_cookie_use_count($id = NULL) {
		if (is_null ( $id )) {
			return $this->error_code_library->getError ( 'system', 'params', 'no_must_parameter', '$id In Function ' . __FUNCTION__ );
		} else {
			$this->db->set ( 'times', 'times+1', FALSE );
			$this->db->set ( 'totaltimes', 'totaltimes+1', FALSE );
			$this->db->where ( '`id` = ' . $id );
			$result = $this->db->update ( $this->table );
		}
	}
	public function update_cookie_wap_count($id = NULL) {
		if (is_null ( $id )) {
			return $this->error_code_library->getError ( 'system', 'params', 'no_must_parameter', '$id In Function ' . __FUNCTION__ );
		} else {
			$this->db->set ( 'times', 'times+1', FALSE );
			$this->db->set ( 'totaltimes', 'totaltimes+1', FALSE );
			$this->db->where ( '`id` = ' . $id );
			$result = $this->db->update ( $this->table );
		}
	}
	public function label_cookie($id = NULL) {
		if (is_null ( $id )) {
			return $this->error_code_library->getError ( 'system', 'params', 'no_must_parameter', '$id In Function ' . __FUNCTION__ );
		} else {
			$this->db->set ( 'status', - 1 );
			$this->db->where ( '`id` = ' . $id );
			$result = $this->db->update ( $this->table );
			return $result;
		}
	}
	public function unlock_cookie($id = NULL) {
		if (is_null ( $id )) {
			return $this->error_code_library->getError ( 'system', 'params', 'no_must_parameter', '$id In Function ' . __FUNCTION__ );
		} else {
			$this->db->set ( 'status', 1 );
			$this->db->where ( '`id` = ' . $id );
			$result = $this->db->update ( $this->table );
			return $result;
		}
		// 解锁cookie
	}
	
	// / 以上接口与cookie_model.php 中的接口完全一致
	// /　以下接口是为管理和测试cookie 而新添加的接口
	// /
	// / 代号的含义
	// / 1代表cookie 可以使用
	// / -1代理cookie 的状态不能够确定　　可能是cookie 暂时不能使用(访问过快)
	// / 也有可能是cookie 过期或者被封导致不能使用　
	// / 在程序调用cookie　后无法获取结果　需将该cookie的状态修改为　－1
	// / -2代表cookie 不能使用　需要重新登陆
	// / -3代表账号被封
	public function adduserandpassword($username, $password) {
		$this->db->set ( 'username', $username );
		$this->db->set ( 'password', $password );
		$this->db->set ( 'last_usetime', time () );
		$this->db->set ( 'last_logintime', time () );
		$this->db->insert ( $this->table );
		echo $this->db->last_query ();
	}
	public function get_uncertain_cookies($status) {
		// 此方法获取不确定是否被封的cookies 即状态为-1的cookie
		// 如果确定cookie还可以使用　修改相应的参数　
		// 造成cookie 状态为-1的原因可能是由于使用过快　，　解决方法是让该cookie 在短期时间之内不再被使用
		// 如果不可以使用则将其状态修改为-2
		$this->db->select ( '*' );
		$this->db->from ( $this->table );
		$this->db->where ( 'status', $status );
		$query = $this->db->get ();
		$result = $query->result (); // 返回所有结果
		echo $this->db->last_query () . "<br>";
		return $result;
	}
	public function change_status($status, $id) {
		if (is_null ( $id )) {
			return $this->error_code_library->getError ( 'system', 'params', 'no_must_parameter', '$id In Function ' . __FUNCTION__ );
		} else {
			$this->db->set ( 'status', $status );
			$this->db->where ( '`id` = ' . $id );
			if (- 2 === $status) {
				$this->db->set ( 'times', 0 );
				// -2表示当前的cookie 已经失效　需要重新登陆
				// 故需将其当前使用次数修改为０
			}
			$result = $this->db->update ( $this->table );
			return $result;
		}
	}
	public function get_all_cookies() {
		$this->db->select ( '*' );
		$this->db->from ( $this->table );
		$query = $this->db->get ();
		$result = $query->result (); // 返回所有结果
		return $result;
	}
	public function changeto_1() {
		$this->db->set ( 'status', - 1 );
		// $this->db->where('status',-2) ;
		$result = $this->db->update ( $this->table );
	}
	
	// array_key_exists() 函数判断某个数组中是否存在指定的 key，如果该 key 存在，则返回 true，否则返回 false。
}